package com.lhd.creational.singleton.demo05;

/**
 * @Author: liuhd
 * @Date: 2024/10/19 17:08
 * @Description: 双重检查锁单例
 */
public class Singleton {
    // volatile防止jvm优化导致的空指针问题
    private static volatile Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        // 如果singleton存在 就别拿锁了
        if (singleton == null) {
            // 假设同时有多个线程进入
            synchronized (Singleton.class) {
                // 第一个拿到锁的线程创建了实例
                // 其他的线程肯定要判断该对象是否存在
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}
